/*
 * @Author: guojiangang guojiangang@hikvision.com.cn
 * @Date: 2024-02-28 09:28:13
 * @LastEditors: guojiangang guojiangang@hikvision.com.cn
 * @LastEditTime: 2024-02-28 10:32:04
 * @FilePath: \cfase:\leetcode\136.只出现一次的数字.js
 * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
 */
/*
 * @lc app=leetcode.cn id=136 lang=javascript
 *
 * [136] 只出现一次的数字
 */

// @lc code=start
/**
 * @param {number[]} nums
 * @return {number}
 */
var singleNumber = function(nums) {
  let n = nums[0]
  for (let i = 1; i < nums.length; i++) {
    // a ^ a = 0；任何数与其自身异或，得到的结果为0
    // a ^ 0 = a; 任何数与 0 异或，得到的结果为自身
    n = n ^ nums[i]
  }
  return n
};

var singleNumber = function(nums) {
  let ans = 0
  for (const n of nums) {
    // a ^ a = 0；任何数与其自身异或，得到的结果为0
    // a ^ 0 = a; 任何数与 0 异或，得到的结果为自身
    // ans = ans ^ n
    ans ^= n
  }
  return ans
};

var singleNumber = function(nums) {
  return nums.reduce((prev, cur) => prev ^ cur, 0)
};


// var singleNumber = function(nums) {
//   const set = new Set()
//   for (let i = 0; i < nums.length; i++) {
//     const n = nums[i]
//     // 存在删除，不存在添加
//     if (set.has(n)) {
//       set.delete(n)
//     } else {
//       set.add(n)
//     }
//   }
//   return Array.from(set)[0]
// };
// @lc code=end

